home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2000 February
/
PCWorld_2000-02_cd.bin
/
Software
/
Servis
/
FFE
/
COMM.SWG
/
0007_HUD C Header.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1997-05-11
|
17KB
|
294 lines
/***************************************************************************\
* MSGBASE.H - Message base header file *
*****************************************************************************
* *
* MB_lib (MsgBase library) V1.00 *
* (Hudson message base access / manipulation routines) *
* *
* This C version (c) F.W. van Wensveen 1993. All rights reserved. *
* Original Pascal source code (c) Richard Faasen and In Fase productions, *
* The Netherlands. *
* *
* First revision: 17/08/1992 *
* *
\***************************************************************************/
/* First, a C++ fixup ******************************************************/
#ifndef __MB_LIB_H
#define __MB_LIB_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes and defines ****************************************************/
#include <dir.h>
#define HCR 0x0D /* Hard carriage return */
#define SCR 0x8D /* Soft carriage return */
#define LF 0x0A /* Line feed */
#define KLUDGE 0x01 /* Kludge denominator */
#define BELL 0x07 /* Bell character / ring a ding */
#define NOKLUDGES 0x00 /* txt_dump shouldn't dump kludges */
#define KLUDGES 0x01 /* txt_dump should dump kludges */
/* Critical errors */
#define NOT_ERR 0x00 /* No error */
#define MEM_ERR 0x01 /* Memory error - out of memory */
#define FRD_ERR 0x02 /* File read error */
#define FWR_ERR 0x03 /* File write error */
#define FCR_ERR 0x04 /* File create error */
#define MNO_ERR 0x05 /* Message base not open error */
#define IRN_ERR 0x06 /* Invalid record no., out of bound */
#define MBC_ERR 0x07 /* Msg base corrupt */
#define MA_DELETED 0x01 /* Message attributes */
#define MA_UNSENT 0X02
#define MA_NETMAIL 0X04
#define MA_PRIVATE 0X08
#define MA_RECEIVED 0X10
#define MA_UNMOVED 0X20
#define MA_LOCAL 0X40
#define NA_KILL 0X01 /* Hudson netmail attributes */
#define NA_SENT 0X02
#define NA_FILE 0X04
#define NA_CRASH 0X08
#define NA_RECEIPT 0X10
#define NA_AUDIT 0X20
#define NA_RETURN 0X40
#define NM_PRIVATE 0X0001 /* Opus (*.MSG) Netmail attributes */
#define NM_CRASH 0x0002
#define NM_RECEIVED 0x0004
#define NM_SENT 0x0008
#define NM_FILE 0x0010
#define NM_TRANSIT 0x0020
#define NM_ORPHAN 0x0040
#define NM_KILL 0x0080
#define NM_LOCAL 0x0100
#define NM_HOLD 0x0200
#define NM_UNUSED 0x4000
#define NM_REQUEST 0x0800
#define NM_RECEIPT 0x1000
#define NM_ISRECEIPT 0x2000
#define NM_AUDIT 0x4000
#define NM_UPDATEREQ 0x8000
/**************************** C A U T I O N ********************************/
/* The strings in the Hudson message base files are all Pascal convention */
/* strings - a length byte followed by the actual characters. */
/* I have attempted to maintain this format by defining the strings as a */
/* structure containing a length byte and a character array, but this */
/* lead to too much trouble from the programmers point of view. So the */
/* strings in the following structure are just defined as arrays of chars. */
/* They may only be read from and written to disk using the read and write */
/* functions in this library, which convert the string formats from Pascal */
/* to C format and vice versa. THEY MAY NOT BE READ AND WRITTEN DIRECTLY!! */
/* Writing structures to the message base by any other means than the */
/* functions provided therefore will cause corruption of the message base. */
/***************************************************************************/
typedef struct { /* MSGINFO.BBS structure definition */
unsigned int low_msg; /* Lowest msg # in message base */
unsigned int high_msg; /* Highest msg # in message base */
unsigned int total_msgs; /* Total # of messages in base */
unsigned int total_on_board [200]; /* Number of messages / board */
} MSGINFO_RECORD;
typedef struct { /* MSGIDX.BBS structure definiton */
int msg_num; /* Message # */
unsigned char board; /* Board # where msg is stored */
} MSGIDX_RECORD;
typedef char MSGTOIDX_RECORD [36]; /* MSGTOIDX.BBS structure def. */
typedef struct { /* MSGHDR.BBS structure definition */
int msgnum; /* Message number */
unsigned int prev_reply; /* Msg # of previous reply, 0 if no */
unsigned int next_reply; /* Msg # of next reply, 0 if none */
unsigned int times_read; /* # of times msg was read, UNUSED */
unsigned int start_block; /* Record # of msg in MSGTXT.BBS */
unsigned int num_blocks; /* # of records in MSGTXT.BBS */
unsigned int dest_net; /* Destination net */
unsigned int dest_node; /* Destination node */
unsigned int orig_net; /* Origin net */
unsigned int orig_node; /* Origin node */
unsigned char dest_zone; /* Destination zone */
unsigned char orig_zone; /* Origin zone */
unsigned int cost; /* Cost (Netmail) */
unsigned char msg_attr; /* Msg attributes. Bits as follows: */
/* 0 : Deleted */
/* 1 : Unsent */
/* 2 : Netmail */
/* 3 : Private */
/* 4 : Received */
/* 5 : Unmoved outgoing echo */
/* 6 : Local */
/* 7 : RESERVED */
unsigned char net_attr; /* Netmail attributes. Bits follow: */
/* 0 : Kill/Sent */
/* 1 : Sent */
/* 2 : File attach */
/* 3 : Crash */
/* 4 : Receipt request */
/* 5 : Audit request */
/* 6 : Is a return receipt */
/* 7 : RESERVED */
unsigned char board; /* Message board # */
char post_time [6]; /* Time message was posted */
char post_date [9]; /* Date message was posted */
char who_to [36]; /* Recipient to whom msg is sent */
char who_from [36]; /* Sender who posted message */
char subject [73]; /* Subject line of message */
} MSGHDR_RECORD;
typedef struct { /* MSGTXT.BBS structure definition */
unsigned char str_len; /* This string is stored in memory */
char str_txt [255]; /* in Pascal format to reduce */
} MSGTXT_RECORD; /* overhead, so take care! */
/* The strings in the *.MSG file header (Opus style) aren't Pascal type */
/* strings but have the 'normal' ASCIIZ format. */
typedef struct { /* OPUS-style (*.MSG) msg format */
char who_from [36]; /* Sender who posted message */
char who_to [36]; /* Recipient to whom msg is sent */
char subject [72]; /* Subject line of message */
char datetime [20]; /* Date/time msg was last edited */
unsigned int times_read; /* # of times message was read */
unsigned int dest_node; /* Destination node */
unsigned int orig_node; /* Origin node */
unsigned int cost; /* Cost to send netmail msg */
unsigned int orig_net; /* Origin net */
unsigned int dest_net; /* Destination net */
unsigned int dest_zone; /* Destination zone (These fields) */
unsigned int orig_zone; /* Origin zone (were padded ) */
unsigned int dest_point; /* Destination point (with 8 0's ) */
unsigned int orig_point; /* Origin point (in FSC-0001 ) */
unsigned int reply_to; /* Msg # to which this one replies */
unsigned int attribute; /* Msg attributes. Bits as follows: */
/* 0 : Private */
/* 1 : Crash */
/* 2 : Received */
/* 3 : Sent */
/* 4 : File attached */
/* 5 : In transit */
/* 6 : Orphan */
/* 7 : Kill when sent */
/* 8 : Locak */
/* 9 : Hold for pickup */
/* 10 : UNUSED */
/* 11 : File request */
/* 12 : Return receipt request */
/* 13 : Is a return receipt */
/* 14 : Audit request */
/* 15 : File update request */
unsigned int next_reply; /* Next msg in reply chain */
} NET_RECORD;
/* Message text is stored as follows: a linked list of records contains */
/* pointers to a MSGTXT record. This record contains 255 bytes of message */
/* text. This Message Text Block List (MTBL) can be changed at will. */
/* Because the programmer won't work with the 'raw' message text in RAM */
/* directly, the string format of the message text is *not* converted. The */
/* text blocks contain the strings in Pascal format. */
typedef struct __mtbl__ { /* Element of Msg Text Block List */
MSGTXT_RECORD * txt; /* Pointer to text block */
struct __mtbl__ * next; /* Pointer to next struct in list */
} MTBL;
typedef MTBL * M_TEXT; /* Text handle - ptr to MTBL start */
/* Public data *************************************************************/
extern MSGINFO_RECORD msginfo; /* Global MSGINFO record */
extern int _Cdecl errortype; /* Indicate type of error occurred */
extern char _Cdecl errorstring []; /* Printable string with error msg. */
/* Macro's and prototypes **************************************************/
/* Manipulating message text in memory */
M_TEXT txt_new (char *); /* Create new text */
int txt_add (M_TEXT, char *); /* Add a line of text */
void txt_dispose (M_TEXT); /* Dispose of text */
int txt_dump (M_TEXT, int (*) (char *), unsigned char,
unsigned char); /* Dump message text */
/* Message base file access */
int msg_open (char *); /* Open message base */
void msg_close (void); /* Close message base */
/* Message base file locking */
int msg_lock (char *); /* Lock message base */
void msg_unlock (void); /* Unlock message base */
/* Reading message base */
int msg_read_info (void); /* Read MSGINFO.BBS */
int msg_read_hdr (long, MSGHDR_RECORD *); /* Read MSGHDR.BBS */
int msg_read_idx (long, MSGIDX_RECORD *); /* Read MSGIDX.BBS */
int msg_read_toidx (long, MSGTOIDX_RECORD *); /* The same with */
M_TEXT msg_read_text (MSGHDR_RECORD *); /* Read text 4 spec'd msg */
/* Writing message base */
int msg_write_info (void); /* Write MSGINFO.BBS */
int msg_write_hdr (long, MSGHDR_RECORD *); /* Write MSGHDR.BBS */
int msg_write_idx (long, MSGIDX_RECORD *); /* Write MSGIDX.BBS */
int msg_write_toidx (long, MSGTOIDX_RECORD *); /* MSGTOIDX.BBS */
int msg_write_text (MSGHDR_RECORD *, M_TEXT); /* New/change txt */
int msg_write_new (MSGHDR_RECORD *, M_TEXT); /* Write new msg */
int msg_kill (long); /* Kill message */
/* Message manipulation support routines */
long msg_msgnr2recnr (unsigned int); /* Convert msg # to rec # */
unsigned int msg_recnr2msgnr (long); /* Convert rec # to msg # */
void msg_hdr_clear (MSGHDR_RECORD *); /* Clear header record */
int msg_fixup4d (MSGHDR_RECORD *, M_TEXT); /* hdr -> @INTL */
/* Message base search routines */
long msg_firstinboard (unsigned char); /* Get # of 1st msg in brd */
long msg_lastinboard (unsigned char); /* Get # of last msg in b.*/
long msg_nextinboard (long); /* Get # of next msg in b.*/
long msg_previnboard (long); /* Get # of prev msg in b.*/
long msg_firstto (MSGTOIDX_RECORD *); /* Get # of 1st msg to.. */
long msg_lastto (MSGTOIDX_RECORD *); /* Get # of last msg to.. */
long msg_nextto (long); /* Get # of next msg to.. */
long msg_prevto (long); /* Get # of prev msg to.. */
/* Netmail search and manipulation support routines */
int net_first (char *); /* Get # of first net msg */
int net_last (char *); /* Get # of last net msg */
int net_next (char *, int); /* Get # of next net msg */
int net_prev (char *, int); /* Get # of prev net msg */
void net_hdr_clear (NET_RECORD *); /* Clear a netmail header */
int net_fixup4d (NET_RECORD *, M_TEXT); /* INTL/FMPT/TOPT */
int net_getlastread (char *); /* Get *.MSG lastread ptr */
int net_setlastread (char *, int); /* Set *.MSG lastread ptr */
/* Reading and writing netmail */
int net_read_hdr (char *, int, NET_RECORD *); /* Read net. hdr */
M_TEXT net_read_text (char *, int); /* Read netmail text */
int net_write (char *, int, NET_RECORD *, M_TEXT); /* Write net. */
int net_kill (char *, int); /* Kill *.MSG netmail msg */
/* Wrap up the C++ fixup ***************************************************/
#ifdef __cplusplus
}
#endif
#endif /* __MB_LIB_H */
/* EOF */